from PyQt5.Qt import *

"""
定时器

常用方法
start() : 启动, 时间间隔是毫秒, 如果已经运行, 会停止重新启动
stop()  : 停止

信号
singleShot: 在给定时间间隔调用一个槽函数发射此信号
timeout: 当定时器超时时发射此信号

"""
class MyQWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.test1()

    def test1(self):
        self.setWindowTitle("QTimer")
        self.label = QLabel("显示当前时间")
        self.startBtn = QPushButton("开始")
        self.endBtn = QPushButton("结束")

        layout = QGridLayout(self)
        layout.addWidget(self.label, 0, 0, 1, 2)
        layout.addWidget(self.startBtn, 1, 0)
        layout.addWidget(self.endBtn, 1, 1)
        self.setLayout(layout)

        # 定时器
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.showTime)

        self.startBtn.clicked.connect(self.startTimer)
        self.endBtn.clicked.connect(self.endTimer)

    def showTime(self):
        time = QDateTime.currentDateTime()
        timeDispaly = time.toString("yyyy-MM-dd hh:mm:ss dddd")
        self.label.setText(timeDispaly)

    def startTimer(self):
        self.timer.start(1000)
        self.startBtn.setEnabled(False)
        self.endBtn.setEnabled(True)

    def endTimer(self):
        self.timer.stop()
        self.startBtn.setEnabled(True)
        self.endBtn.setEnabled(False)


# 测试
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = MyQWidget()
    window.show()
    # 窗口10秒后消失
    QTimer.singleShot(10000, app.quit)
    sys.exit(app.exec_())